#include <stdio.h>
#include <stdlib.h>
#define type int
#define true 1
#define false 0
typedef struct array
{
    type *dp;
    int size;
    int len;
}Array;
void freearray(Array *a)
{
    if(a->dp!=NULL)
    {
        free(a->dp);
        a->dp=NULL;
        a->len=0;
    }
}

int initarray(Array *a)
{
    a->dp=(type *)malloc(sizeof(type)*a->size);
    if(a->dp==NULL)
    {
        printf("malloc error!\n");
        return false;
    }
    return true;

}
int Reallocarray(Array *a)
{
    type *temp=a->dp;
    a->size=a->size*2;
    a->dp=(type *)malloc(sizeof(type)*a->size);
    if(a->dp==NULL)
    {
        printf("realloc error!\n");
        a->dp=temp;
        a->size=a->size/2;
        return false;
    }
    for(int i=0;i<a->len;i++)
    {
        a->dp[i]=temp[i];
    }
    free(temp);
    temp=NULL;
    return true;

}
int insertarray(Array *a,type element)
{
    if(a->len==a->size)
    {
        if(Reallocarray(a)==false)
        {
            printf("can not contain more elements\n");
            return false;
        }
    }
    a->dp[a->len++]=element;
    return true;
}
void travearray(Array *a)
{
    printf("array len:%d   array size:%d\n",a->len,a->size);
    printf("------------------------------------------\n");
    for(int i=0;i<a->len;i++)
    {
        printf("%d ",a->dp[i]);
    }
    printf("\n");
    printf("------------------------------------------\n\n");
}
void main()
{
    Array a={NULL,10,0};
    initarray(&a);
    for(int i=0;i<10;i++)
    {
        insertarray(&a,i+1);
    }
    travearray(&a);
    for(int i=0;i<10;i++)
    {
        insertarray(&a,i+1);
    }
    travearray(&a);
    freearray(&a); 
}